package Model;

import Componenten.Coordinaat;
import Componenten.LocalTypes;
import java.util.HashMap;
import java.util.Map;

/**
 * Klasse die een vak/veld op het speelbord representeert.
 * @author Bram Slob en Roderick van Seijen
 */
public class Vak implements LocalTypes {
    
    private VakType vakType;
    private Coordinaat pos;
    private Element element;
    private Map<Richting, Vak> buren;
    
    /**
     * Constructor voor Vak.
     * @param p X en Y positie van het nieuwe Vak. 
     */
    public Vak(Coordinaat p){
        buren = new HashMap();
        pos = p;
    }
    
    /**
     * @return  Type van het vak (buiten / eind / normaal)
     */
    public VakType getVakType()
    {
        return vakType;
    }
    
    /**
     * @param vt  Type van het vak (buiten / eind / normaal)
     */
    public void setVakType(VakType vt)
    {
        vakType = vt;
    }
    
    /**
     * @return  Positie van het vak op het speelbord (x en y-coordinaten)
     */
    public Coordinaat getPositie () {
        return pos;
    }
    
    /**
     * @param x  x-coordinaat van het vak op het speelbord
     * @param y  y-coordinaat van het vak op het speelbord
     */
    public void setPositie(int x, int y) {
        pos.setX(x);
        pos.setY(y);
    }
    
    /**
     * @return  Element dat op het vak staat of null als het vak leeg is
     */
    public Element getElement(){
        return element;
    }
    
    /**
     * @param e  Element dat op het vak moet komen te staan
     */
    public void setElement(Element e){
        element = e;
    }
    
    /**
     * @param r  Richting waarin het buurvak zich bevindt
     * @return   Buurvak in de gegeven richting
     */
    public Vak getBuurvak(Richting r){
        return buren.get(r);
    }
    
    /**
     * @param r  Richting waarin het buurvak zich bevindt
     * @param v  Buurvak in de gegeven richting
     */
    public void setBuurvak(Richting r, Vak v){
        buren.put(r, v);
    }
    
}
